// Netcat1 is a read-only TCP client.
package main

import (
	"bufio"
	"demo/8.2/ftp"
	"fmt"
	"log"
	"net"
	"os"
	"path/filepath"
	"strings"
)

func main() {
	conn, err := net.Dial("tcp", "localhost:8000")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()
	sendServer(conn)
}

func Dwq() {
	fmt.Println("dwq")
}

func sendServer(conn net.Conn) {
	scanner := bufio.NewScanner(os.Stdin)

	fmt.Print("请输入命令：")
	for scanner.Scan() {
		str := scanner.Text()
		args := strings.Split(str, " ")
		switch args[0] {
		case "get": // 获取服务器上的文件
			sendServerMessage(conn, []byte(str))
			conntent, err := getServerMessage(conn)
			if err != nil {
				clientErr(err)
				break
			}
			err = os.WriteFile(fmt.Sprintf("/home/dwq/code/golang/demo/down/%s", filepath.Base(args[1])), conntent, 0666)
			if err != nil {
				clientErr(err)
				break
			}
			fmt.Println("文件下载完毕")
		case "send": // 上传文件到服务器上
			sendServerMessage(conn, []byte(str))
			fileBytes, err := os.ReadFile(args[1])
			if err != nil {
				clientErr(err)
				break
			}
			sendServerMessage(conn, fileBytes)
			fmt.Println("文件上传完毕")
		default:
			sendServerMessage(conn, []byte(str))
			conntent, err := getServerMessage(conn)
			if err != nil {
				clientErr(err)
				continue
			}
			fmt.Println(string(conntent))
		}
		fmt.Print("请输入命令：")
	}
}

func clientErr(err error) {
	fmt.Println("client err", err)
}

func sendServerMessage(conn net.Conn, content []byte) {
	ftp.WriteData(conn, content)
}

func getServerMessage(conn net.Conn) ([]byte, error) {
	return ftp.ReadData(conn)
}
